//package org.ricks.orm.mongodb.asm;
//
///**
// * @Author ricks [chenwei]
// * @Version [v1.0]
// * @CreateTime 2024-06-11   16:07
// * @Description TODO
// */
//
//import org.ricks.common.asm.ClassVisitor;
//import org.ricks.common.asm.MethodVisitor;
//import org.ricks.common.asm.Type;
//
//import java.util.ArrayList;
//import java.util.List;
//
//public class MethodFindInvokeVisitor extends ClassVisitor {
//    private final String methodName;
//    private final String methodDesc;
//
//    public MethodFindInvokeVisitor(int api, ClassVisitor classVisitor, String methodName, String methodDesc) {
//        super(api, classVisitor);
//        this.methodName = methodName;
//        this.methodDesc = methodDesc;
//    }
//
//    @Override
//    public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
//        if (methodName.equals(name) && methodDesc.equals(descriptor)) {
//            return new MethodFindInvokeAdapter(api, null);
//        }
//        return null;
//    }
//
//    private static class MethodFindInvokeAdapter extends MethodVisitor {
//        private final List<String> list = new ArrayList<>();
//
//        public MethodFindInvokeAdapter(int api, MethodVisitor methodVisitor) {
//            super(api, methodVisitor);
//        }
//
//        @Override
//        public void visitMethodInsn(int opcode, String owner, String name, String descriptor, boolean isInterface) {
//            // 首先，处理自己的代码逻辑
//            String info = String.format("%s.%s%s", owner, name, descriptor);
//            if (!list.contains(info)) {
//                list.add(info);
//            }
//
//            // 其次，调用父类的方法实现
//            super.visitMethodInsn(opcode, owner, name, descriptor, isInterface);
//
//            Type[] argumentTypes = Type.getArgumentTypes(descriptor);
//            for (Type argumentType : argumentTypes) {
//                System.out.print(argumentType + " ");
//            }
//            System.out.println();
//        }
//
//        @Override
//        public void visitParameter(String name , int access) {
//            System.err.println("parameter name:" + name);
//            System.err.println("parameter access:" + access);
//            super.visitParameter(name, access);
//        }
//
//
//
//        @Override
//        public void visitEnd() {
//            // 首先，处理自己的代码逻辑
//            for (String item : list) {
//                System.out.println(item);
//            }
//
//            // 其次，调用父类的方法实现
//            super.visitEnd();
//        }
//    }
//}